package com.java.zhuiyun.util;


import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;

/**
 * @ClassName TencentYunVedioUtil
 * @Description TODO
 * @Author lzy
 * @Date 2022/11/14 18:10
 **/

public class TencentYunVedioUtil {

    // appName
    public static final String appName = "live";
    // 推流防盗链的key 你自己的推流K
    public static final String push_key = "a4b6deff67dfecd1f645fdbcecaca0ec";
    // 拉流防盗链的key 你自己的直播K，注意域名需要去解析CNAME，推流k和拉流k可能相同
    public static final String play_key = "nb8BHhKir5YPaTYnmznQ";
    // 推流地址 详细请看文档
    public static final String pushUrl ="rtmp://education.lfeifan.com/" + appName + "/";

    // 自己申请的播放地址域名xx.xxx.cn或xx.xxx.com
    public static final String playOrg ="gz.lfeifan.com";

    /**
    * @Description 生成 HLS播放流地址
    * @Author lzy
    * @Date 2022/11/17 15:27
    * @Return java.lang.String
    * @param streamName
    */
    public static String getPlayUrlHlsM(String streamName){
        String s = "http://" + playOrg + "/" + appName + "/" + streamName + ".m3u8";
        return s;
    }

    /**
    * @Description 生成 FLV播放流地址
    * @Author lzy
    * @Date 2022/11/17 15:27
    * @Return
    * @param streamName
    */
    public static String getPlayUrlFLVM(String streamName){
        String s = "http://" + playOrg + "/" + appName + "/" + streamName + ".flv";
        return s;
    }

    /**
    * @Description 生成 RTMP播放流地址
    * @Author lzy
    * @Date 2022/11/17 15:30
    * @Return java.lang.String
    * @param streamName
    */
    public static String getPlayUrlRTMPM(String streamName){
        String s = "rtmp://" + playOrg + "/" + appName + "/" + streamName;
        return s;
    }

    /**
     * 生成防盗链签名
     * @param key ：防盗链key
//     * @param stream_id ：直播码(或称作流ID)
     * @param txTime ：过期时间 16进制的unix时间戳
     * @return
     */
    public static String genSign(String key,String streamName, String txTime) {
        return MD5Encode.getMD5Str(key+streamName+txTime);
    }

    /**
     * 播放
     * @param key
     * @param txTime
     * @return
     */
    public static String pushSign(String key, String streamName, String txTime) {
        return MD5Encode.getMD5Str(key+streamName+txTime);
    }

    /**
     * 生成直播码
     * 直播码 也叫房间号，推荐用随机数字或者用户ID，注意一个合法的直播码需要拼接 BIZID 前缀。
     * @param bizid
     * @param userId 用户id
     * @return
     */
    public static String genLiveCode(String bizid,String userId) {
        return bizid+"_"+userId;
    }

    /**
     * 随机生成6位数字
     */
    public static String bizid(){
        int newNum = (int)((Math.random()*9+1)*100000);
        return String.valueOf(newNum);
    }

    /**
     * 将传入的时间转换为 16进制
     * @param date
     * @return
     */
    public static String to16Hex(Date date) {
        long ab = date.getTime()/1000;
        String a = Long.toHexString(ab);
        return a.toUpperCase();
    }

    /**
     * 将当前时间加1天
     */
    public static Date addOneDay() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_MONTH, 1);
        return cal.getTime();
    }

    /**
     * 校验是否在线
     * @param urls 拉流地址
     * @return
     */
    public static boolean isPush(String urls) {
        try {
            URL url = new URL(urls);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(1000);
            conn.setReadTimeout(1000);
            conn.setRequestMethod("GET");
            conn.connect();
            return conn.getResponseCode() == 200;
        } catch (Exception ignored) {
        }
        return false;
    }

}
